/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package gcs.Interface;

import gcs.Negocio.Prestacao;
import gcs.Negocio.Contracto;
import gcs.Negocio.Cliente;
import gcs.Negocio.Actividade;
import gcs.Dados.ClientesBD;
import gcs.Dados.ContratoDB;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 *
 * @author Emanuel
 */
public class Contabilidade {

    ClientesBD clbd;
    ContratoDB contbd;
    GCS gcs;

    public Contabilidade(){
        clbd = new ClientesBD();
        contbd = new ContratoDB();
        gcs = new GCS();
    }
    
    public int numPrestacoes(Contracto c){
        return c.getListaPrestacoes().size();
    }

    public void confirmarPagamento(Cliente cliente,Contracto c){
        GregorianCalendar agora = new GregorianCalendar();
        Date dataagora = agora.getTime();

        for(Prestacao p : c.getListaPrestacoes()){
            Date datanovo = p.getDataLimite().getTime();
            int dif =(int) (datanovo.getTime() - dataagora.getTime());

            if(!p.getPago() && dif<0)
                p.setPago(true);
        }
        //falta inserir na BD as prestaçoes
        for(Prestacao p : c.getListaPrestacoes())
            contbd.actUpdate(p);
        //actualiza historico
        gcs.inseriHist(cliente, "efectuou pagamentos.");
    }

    public double dinheirodevolver(Contracto c){
        double devolver=0;
        GregorianCalendar agora = new GregorianCalendar();
        Date dataagora = agora.getTime();

        for(Prestacao p : c.getListaPrestacoes()){
            GregorianCalendar novo =p.getDataLimite();
            novo.add(Calendar.YEAR,1);
            Date datalimite = novo.getTime();
            long diferenca = dataagora.getTime()-datalimite.getTime();
            
            if( p.getPago() && diferenca<0){
                int dias = (int) Math.abs(diferenca/1000/60/60/24);
                //System.out.println("dias"+dias+"preco"+c.getTotalpordia());
                devolver = dias*(double)c.getTotalpordia();
                return devolver;
            }
        }
        return devolver;
    }

    public double valorPagar(Contracto c,double taxalucro){
        float total=0;
        GregorianCalendar agora = new GregorianCalendar();
        Date dataagora = agora.getTime();

        for(Prestacao p : c.getListaPrestacoes()){
            Date datanovo = p.getDataLimite().getTime();
            int dif =(int) (datanovo.getTime() - dataagora.getTime());

            if(!p.getPago() && dif<0)
                total+=p.getMontante();
        }
        return total*(taxalucro+1);
    }

    public double remActivContr(Contracto c,Actividade a){
        double total=0;

        GregorianCalendar agora = new GregorianCalendar();
        Date dataagora = agora.getTime();

        for(Prestacao p:c.getListaPrestacoes()){
            Date datalimite = p.getDataLimite().getTime();
            int dif = (int)(datalimite.getTime() - dataagora.getTime());
            if(dif<0 && !p.getPago())
                total=Math.abs(dif)*a.getPreco();
        }
        return total;

        

    }

    public double cancelaContr(Contracto cont){
        contbd.inactivaContracto(cont);
        return dinheirodevolver(cont);
    }
}
